/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package extracao;

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 *
 * @author Gustavo & Rodrigo
 */
public class ExtracaoCatalogoAntigo extends Extracao {
    
    private String URL;
       
    public DadosHTML extrair(Dados data) throws Exception{

            DadosHTML dadosExtraidos;
            Logger logger = LoggerFactory.getLogger(ExtracaoCatalogoAntigo.class);

            try{

                criarURL(data);
                Document document;
                System.out.println("Antes de conectar URL:"+URL);
                document = Jsoup.connect(URL).get();
                Elements AllElements = document.getAllElements();
                dadosExtraidos = parse(AllElements, data);
                
                return dadosExtraidos;

            } catch (DisciplinaNaoExistente e){
                logger.error(e.codigo);
                throw e;
            }
            catch (IOException e){
                logger.error("Erro de conexão do JSoup");
                throw e;
            }

    }
    
    private DadosHTML parse(Elements AllElements, Dados data) throws DisciplinaNaoExistente{
        DadosHTML parsedHTML = new DadosHTML();
        Element j;
        String codigo = data.getDisciplina().getCodigo().toLowerCase();
        
        int i;
        for(i=0; i<AllElements.size(); i++) {
            j= AllElements.get(i);
            if(codigo.equals(j.attr("name"))) break;
        }
        
        
        if(i+12<=AllElements.size()){
            parsedHTML.setCodigo(codigo);
            parsedHTML.setNome(AllElements.get(i).text());
            parsedHTML.setCargaHoraria(AllElements.get(i+3).text());
            if ("Ementa:".equals(AllElements.get(i+9).text())) {
                parsedHTML.setPrereqs("Não há");
                parsedHTML.setEmenta(AllElements.get(i+10).text());
            } else {
                parsedHTML.setPrereqs(AllElements.get(i+10).text());
                parsedHTML.setEmenta(AllElements.get(i+12).text());
            }
        } else {
            Logger logger = LoggerFactory.getLogger(Extracao.class);
            logger.info("Disciplina "+codigo+" não encontrada");
            throw new DisciplinaNaoExistente("Disciplina Não Encontrada");
        }
        
        return parsedHTML;
    }
    
    private void criarURL(Dados data){
        
        int ano;
        String prefixo;
        
        prefixo = data.getDisciplina().getCodigo().substring(0,2)
                  .toLowerCase();
        ano = data.getAnoCatalogo();
        if(ano<2000) ano = ano-1900;
        URL = "http://www.dac.unicamp.br/sistemas/catalogos/grad/catalogo" 
              + ano + "/ementas/todas" + prefixo + ".html";
        System.out.println("URL==="+URL);
    }
}
